class Prctuce:
    def hello(self):
        print('hello world')

class Test:
    age = 19
    def __init__(self):
        print('实例对象创建成功')

class User:
    # 类属性
    addr = '上海'
    def __init__(self, username, age):
        """
        构造方法
        :param username: 用户名
        :param age: 年龄
        """
        self.username = username
        self.age = age

    def show(self):
        """
        实例方法：展示用户信息
        :return:
        """
        print(f'[我的姓名是：{self.username}, 我的年龄是：{self.age}, 我的地址是：{self.addr}]')

if __name__ == '__main__':
    #类：Prctuce
    # Prctuce.hello() # 只能使用实例对象来调用实例方法 Prctuce.hello() missing 1 required positional argument: 'self'
    # prcture = Prctuce()
    # prcture.hello() # hello world
    # 定义一个实例对象user
    user = User('张三', 18)
    print('使用实例对象调用实例方法-show():')
    user.show()
    print('使用类名调用类属性-addr:', User.addr)
    print('使用实例对象调用类属性-addr:', user.addr)
    # print('使用类名调用实例属性-age:', User.age)  #无法使用类名来调用实例属性， AttributeError: type object 'User' has no attribute 'age'
    print('使用实例对象调用实例属性-age:', user.age)
    User.addr = '北京'
    print('使用类名修改类属性-addr:', User.addr) # 使用类名修改类属性-addr: 北京
    user.addr = '西安'
    print('使用实例对象修改类属性-addr:', user.addr)
    user.age = 22
    print('使用实例对象修改实例属性-age:', user.age)
    # user1 = User()  #创建的示例对象未传入参数，无法调用  User.__init__() missing 2 required positional arguments: 'username' and 'age'
    # user1.show()

    print('-----------分割线-----------------')
    aa = Test()
    print(aa.age)
    # 修改类属性，只能通过类名.属性名修改
    aa.age = 20
    print(aa.age)   # 20
    print(Test.age) # 19
    Test.age = 26
    print(Test.age) # 26
    print(aa.age)   # 20
    bb = Test()
    print(bb.age)   # 26

